package cn.diancan.util;
import java.io.*;
import java.lang.*;
import java.util.*;
import java.text.*;
import java.net.*;

import org.junit.Test;



public class MediocreExecJavac {

    public void runCmd(String command) {
        try {
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec(command);
            InputStream stderr = proc.getErrorStream();
            InputStreamReader isr = new InputStreamReader(stderr);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
 
            while ( (line = br.readLine()) != null)
                System.out.println(line);

            int exitVal = proc.waitFor();
            System.out.println("Process exitValue: " + exitVal);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    public boolean transfer(String infile,String outfile) {
        String avitoflv = "ffmpeg -i "+infile+" -ar 22050 -ab 56 -f flv -y -s 320x240 "+outfile;
        String flvto3gp = "ffmpeg -i " + infile + " -ar 8000 -ac 1 -acodec amr_nb -vcodec h263 -s 176x144 -r 12 -b 30 -ab 12 " + outfile;
        String avito3gp = "ffmpeg -i " + infile + " -ar 8000 -ac 1 -acodec amr_nb -vcodec h263 -s 176x144 -r 12 -b 30 -ab 12 " + outfile;
        String avitojpg = "ffmpeg -i " + infile + " -y -f image2 -ss 00:00:10 -t 00:00:01 -s 350x240 " + outfile;

        try {
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec(avitoflv);
            InputStream stderr = proc.getErrorStream();
            InputStreamReader isr = new InputStreamReader(stderr);
            BufferedReader br = new BufferedReader(isr);
            String line = null;

            while ( (line = br.readLine()) != null)
                System.out.println(line);

            int exitVal = proc.waitFor();
            System.out.println("Process exitValue: " + exitVal);
        } catch (Throwable t) {
            t.printStackTrace();
            return false;
        }
        return true;
    }

    public static String readFile(String fileName,int id) {
        String dataStr = "";
        FileInputStream fis = null;

        try {
            FileReader file = new FileReader(fileName);//建立FileReader对象，并实例化为fr
            BufferedReader br=new BufferedReader(file);//建立BufferedReader对象，并实例化为br
            String Line=br.readLine();//从文件读取一行字符串
            dataStr=Line;
            br.close();//关闭BufferedReader对象
        } catch(Exception e) {

        } finally {
            try {
                if(fis!=null)
                    fis.close();
            } catch(Exception e) {}
        }
        return dataStr;
    }

    public String readtime(String file) {
        String str="/root/Desktop/info.txt";
        String timelen = "";
        String cmd = "timelen "+file;

        runCmd(cmd);
        timelen=readFile(str,1);

        return timelen;
    }

    public static void main(String args[]) {
        MediocreExecJavac me = new MediocreExecJavac();
        String infile = "F:/ff/ff2/98-B17706C94DC7B0AC246A82A910FE830C.mp4";
        String outfile = "F:/ff/ff2/98-B17706C94DC7B0AC246A82A910FE830C.flv";

/*        String timelen = me.readtime(infile);
        System.out.println("timelen is :" + timelen);*/

        if(me.transfer(infile,outfile)) {
            System.out.println("the transfer is ok!");
        } else {
            System.out.println("the transfer is error!");
        }
    }
    
    @Test
    public void f(){
	try {
	    String m="89-502D6B5213B14CFC83E3302E2A019371";
	    String infile="d:\\aaa\\ff2\\"+m+".mp4";
	    String outfile="D:\\ProgramFiles\\apache-tomcat-6.0.36-02\\webapps\\zuwo\\video\\"+m+".mp4";
	    String outh264file="d:\\aaa\\ff2\\h\\"+m+".h264";
	    String avitoflv = "ffmpeg -i "+infile+" -ar 22050 -ab 56 -f flv -y -s 320x240 "+outfile;
	    System.out.println(avitoflv);
	    String a2="D:\\ProgramFiles\\ffmpeg\\bin\\ffmpeg -i "+infile+" -vcodec copy -vbsf h264_mp4toannexb -an "+outh264file+"";
	    String a3="D:\\ProgramFiles\\ffmpeg\\bin\\ffmpeg -i "+outh264file+" -f mp4 "+outfile+"";
	    System.out.println(a2);
	    System.out.println(a3);
	    exec(a2);
	    exec(a3);
	    
	} catch (Exception e) { 
	    e.printStackTrace();
	}
	
    }
    
    
    
    
    
	/**
	 * 命令行
	 */
	public static void exec(String cmd) throws Exception{ 
			Process ps = Runtime.getRuntime().exec(cmd);
			// new StreamForwarder(ps.getInputStream(), System.err).start(); new StreamForwarder(ps.getErrorStream(), System.err).start();
			InputStream is = ps.getInputStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
			String line;
			while ((line = reader.readLine()) != null) {
				System.out.println(line.toString());
			}
			
			if (ps.waitFor() != 0) {
				ps.destroy();
			} 
	}
	
	@Test
	public void f2(){
		try {
		    
		    String m="90-A58802272C9B76B247B032FA1E5D7297";
		    String infile="d:\\aaa\\ff2\\"+m+".mp4";
		    String outfile="D:\\ProgramFiles\\apache-tomcat-6.0.36-02\\webapps\\zuwo\\video\\"+m+".mp4";
		    String outh264file="d:\\aaa\\ff2\\h\\"+m+".h264";
		    String avitoflv = "ffmpeg -i "+infile+" -ar 22050 -ab 56 -f flv -y -s 320x240 "+outfile;
		    System.out.println(avitoflv);
		    
		    List<String> l_2 =new ArrayList<String>();
		    l_2.add("D:\\ProgramFiles\\ffmpeg\\bin\\ffmpeg");
		    l_2.add("-i");
		    l_2.add(infile);
		    l_2.add("-vcodec");
		    l_2.add("copy");
		    l_2.add("-vbsf");
		    l_2.add("h264_mp4toannexb");
		    l_2.add("-an");
		    l_2.add(outh264file);
		    exec(l_2.toArray(new String[]{}));
		    
		    List<String> l_3 =new ArrayList<String>();
		    l_3.add("D:\\ProgramFiles\\ffmpeg\\bin\\ffmpeg");
		    l_3.add("-i");
		    l_3.add(outh264file);
		    l_3.add("-f");
		    l_3.add("mp4");
		    l_3.add("-vf"); 
		    l_3.add("transpose=1");
		    l_3.add(outfile);
		    exec(l_3.toArray(new String[]{}));
		    
		    
		   /* List<String> l_3 =new ArrayList<String>();
		    l_3.add("D:\\ProgramFiles\\ffmpeg\\bin\\ffmpeg");
		    l_3.add("-i");
		    l_3.add(outh264file);
		    l_3.add("-vf");  
		    l_3.add(outfile);
		    exec(l_3.toArray(new String[]{}));*/
		    
		    
		    //ffmpeg -i c:/1.flv -vf "transpose=1" c:/1s.flv
		    
		    
		    
		    String a2="ffmpeg -i "+infile+" -vcodec copy -vbsf h264_mp4toannexb -an "+outh264file+"";
		    String a3="ffmpeg -i "+outh264file+" -f mp4 "+outfile+"";
		    System.out.println(a2);
		    System.out.println(a3);
		    //exec(a2);
		   // exec(a3);
		    
		} catch (Exception e) { 
		    e.printStackTrace();
		}
	}
	

	public static void exec(String[] command) throws Exception{
	    Process videoProcess = new ProcessBuilder(command).redirectErrorStream(true).start();
            
            new PrintStream(videoProcess.getErrorStream()).start();
            
            new PrintStream(videoProcess.getInputStream()).start();
            
            videoProcess.waitFor();
	}
}